home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 May / macformat-024.iso / Shareware City / Developers / Kant Pro source Folder / Kant Pro 1.1 ƒ / Shell ƒ / generic window handlers.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-23  |  5.2 KB  |  236 lines  |  [TEXT/MMCC]

  1. #include "generic window handlers.h"
  2. #include "text twiddling.h"
  3. #include "drag utilities.h"
  4. #include "window layer.h"
  5. #include "main.h"
  6.  
  7. #define kGrowBoxSize    15
  8.  
  9. enum { key_LeftArrow=0x1c, key_RightArrow, key_UpArrow, key_DownArrow };
  10. enum { key_PageUp=0x0b, key_PageDown };
  11. enum { key_Home=0x01 };
  12. enum { key_End=0x04 };
  13.  
  14. extern    Boolean            gInProgress;    /* see environment.h */
  15. extern    Boolean            gCustomCursor;
  16.  
  17. void GenericCopybits(WindowPtr theWindow, WindowPtr offscreenWindowPtr, Boolean active)
  18. {
  19.     Rect            tempRect;
  20.     
  21.     if (active)
  22.     {
  23.         DrawGrowIcon(theWindow);
  24.     }
  25.     else
  26.     {
  27.         tempRect.bottom=theWindow->portRect.bottom;
  28.         tempRect.right=theWindow->portRect.right;
  29.         tempRect.left=tempRect.right-kGrowBoxSize+1;
  30.         tempRect.top=tempRect.bottom-kGrowBoxSize+1;
  31.         EraseRect(&tempRect);
  32.     }
  33.     
  34.     UpdateControls(theWindow, theWindow->visRgn);
  35.     
  36.     tempRect=theWindow->portRect;
  37.     tempRect.bottom-=kGrowBoxSize;
  38.     tempRect.right-=kGrowBoxSize;
  39.     CopyBits(    &(offscreenWindowPtr->portBits),
  40.                 &(theWindow->portBits),
  41.                 &tempRect, &tempRect, 0, 0L);
  42. }
  43.  
  44. void GenericResizeControls(WindowPtr theWindow, short destOverload)
  45. {
  46.     TEHandle        hTE;
  47.     ControlHandle    vScrollBar, hScrollBar;
  48.     
  49.     hTE=GetWindowTE(theWindow);
  50.     vScrollBar=GetWindowVScrollBar(theWindow);
  51.     hScrollBar=GetWindowHScrollBar(theWindow);
  52.     AdjustScrollSizes(theWindow, hTE, vScrollBar, hScrollBar, destOverload);
  53.     AdjustViewRect(hTE);
  54.     TECalText(hTE);
  55.     AdjustForEndScroll(vScrollBar, hTE);
  56.     AdjustVScrollBar(vScrollBar, hTE);
  57. }
  58.  
  59. void GenericGetGrowSize(WindowPtr theWindow, Rect *sizeRect)
  60. {
  61.     SetRect(sizeRect, 200, 48+kGrowBoxSize+1, 32766, 32767);
  62. }
  63.  
  64. void GenericIdleInWindow(WindowPtr theWindow, Point mouseLoc)
  65. {
  66.     TEHandle        hTE;
  67.     Boolean            inDragRgn;
  68.     
  69.     if (gInProgress)
  70.         return;
  71.     
  72.     hTE=GetWindowTE(theWindow);
  73.     if (hTE==0L)
  74.         return;
  75.     
  76.     TEIdle(hTE);
  77.     
  78.     if (PtInRect(mouseLoc, &((**hTE).viewRect)))
  79.     {
  80.         if (WindowIsDraggableQQ(theWindow))
  81.             inDragRgn=CursorInDraggableRgn(mouseLoc, theWindow);
  82.         else
  83.             inDragRgn=FALSE;
  84.         
  85.         if (inDragRgn)
  86.         {
  87.             gCustomCursor=FALSE;
  88.         }
  89.         else if (!gCustomCursor)
  90.         {
  91.             SetCursor(*GetCursor(iBeamCursor));
  92.             gCustomCursor=TRUE;
  93.         }
  94.     }
  95.     else
  96.     {
  97.         gCustomCursor=FALSE;
  98.     }
  99. }
  100.  
  101. Boolean GenericKeyPressedInWindow(WindowPtr theWindow, unsigned char theChar)
  102. {
  103.     TEHandle        hTE;
  104.     ControlHandle    vScrollBar;
  105.     
  106.     if (gInProgress)
  107.     {
  108.         gInProgress=FALSE;
  109.         return TRUE;
  110.     }
  111.     
  112.     ObscureCursor();
  113.     hTE=GetWindowTE(theWindow);
  114.     vScrollBar=GetWindowVScrollBar(theWindow);
  115.     
  116.     switch (theChar)
  117.     {
  118.         case key_PageUp:
  119.             ScrollActionProc(vScrollBar, inPageUp);
  120.             break;
  121.         case key_PageDown:
  122.             ScrollActionProc(vScrollBar, inPageDown);
  123.             break;
  124.         case key_Home:
  125.             TEPinScroll(0, TEGetHeight((**hTE).nLines, 1, hTE), hTE);
  126.             break;
  127.         case key_End:
  128.             TEPinScroll(0, -TEGetHeight((**hTE).nLines, 1, hTE), hTE);
  129.             break;
  130.         default:
  131.             return FALSE;
  132.             break;
  133.     }
  134.     
  135.     AdjustVScrollBar(vScrollBar, hTE);
  136.     
  137.     return TRUE;
  138. }
  139.  
  140. Boolean GenericMouseClickedInWindow(WindowPtr theWindow, Point thePoint, Boolean isEditable)
  141. {
  142.     short            partCode;
  143.     ControlHandle    theControl;
  144.     short            scrollDistance;
  145.     short            oldSetting;
  146.     ControlActionUPP    scrollActionUPP;
  147.     TEHandle        hTE;
  148.     
  149.     if (gInProgress)
  150.         return TRUE;
  151.     
  152.     hTE=GetWindowTE(theWindow);
  153.     
  154.     if ((PtInRect(thePoint, &((**hTE).viewRect))) && (isEditable))
  155.     {
  156.         TEClick(thePoint, (GetTheModifiers()&512) ? TRUE : FALSE, hTE);
  157.         ResetHiliteRgn(theWindow);
  158.         return TRUE;
  159.     }
  160.     else
  161.     {
  162.         scrollActionUPP=NewControlActionProc(ScrollActionProc);
  163.         partCode=FindControl(thePoint, theWindow, &theControl);
  164.         if (theControl==GetWindowVScrollBar(theWindow))
  165.         {
  166.             switch (partCode)
  167.             {
  168.                 case inThumb:
  169.                     oldSetting=GetControlValue(theControl);
  170.                     partCode=TrackControl(theControl, thePoint, 0L);
  171.                     if (partCode==inThumb)
  172.                     {
  173.                         scrollDistance=oldSetting-GetControlValue(theControl);
  174.                         if (scrollDistance!=0)
  175.                         {
  176.                             hTE=GetWindowTE(theWindow);
  177.                             TEPinScroll(0, scrollDistance*(**hTE).lineHeight, hTE);
  178.                         }
  179.                     }
  180.                     break;
  181.                 case inUpButton:
  182.                 case inDownButton:
  183.                 case inPageUp:
  184.                 case inPageDown:
  185.                     partCode=TrackControl(theControl, thePoint, scrollActionUPP);
  186.                     break;
  187.             }
  188.             
  189.             ResetHiliteRgn(theWindow);
  190.             DisposeRoutineDescriptor(scrollActionUPP);
  191.             
  192.             return TRUE;
  193.         }
  194.     }
  195.     
  196.     DisposeRoutineDescriptor(scrollActionUPP);
  197.     
  198.     return FALSE;
  199. }
  200.  
  201. void GenericActivate(WindowPtr theWindow)
  202. {
  203.     GrafPtr            curPort;
  204.     
  205.     GetPort(&curPort);
  206.     SetPort(theWindow);
  207.     TEActivate(GetWindowTE(theWindow));
  208.     HiliteControl(GetWindowVScrollBar(theWindow), 0);
  209.     HiliteControl(GetWindowHScrollBar(theWindow), 0);
  210.     DrawGrowIcon(theWindow);
  211.     UpdateControls(theWindow, theWindow->visRgn);
  212.     SetPort(curPort);
  213.     SetWindowIsActive(theWindow, TRUE);
  214. }
  215.  
  216. void GenericDeactivate(WindowPtr theWindow)
  217. {
  218.     Rect            tempRect;
  219.     GrafPtr            curPort;
  220.     
  221.     GetPort(&curPort);
  222.     SetPort(theWindow);
  223.     TEDeactivate(GetWindowTE(theWindow));
  224.     gCustomCursor=FALSE;
  225.     HiliteControl(GetWindowVScrollBar(theWindow), 255);
  226.     HiliteControl(GetWindowHScrollBar(theWindow), 255);
  227.     tempRect.bottom=theWindow->portRect.bottom;
  228.     tempRect.right=theWindow->portRect.right;
  229.     tempRect.left=tempRect.right-kGrowBoxSize+1;
  230.     tempRect.top=tempRect.bottom-kGrowBoxSize+1;
  231.     EraseRect(&tempRect);
  232.     UpdateControls(theWindow, theWindow->visRgn);
  233.     SetPort(curPort);
  234.     SetWindowIsActive(theWindow, FALSE);
  235. }
  236.